""" 编译器是一种实现编程语言规范的计算机程序，其核心功能是将通常以源代码文件形式编写的源语言程序，"翻译"成等效的机器可读指令（目标语言，常以二进制形式存在，称为目标代码）。这种翻译过程称为编译。我们通过编译源代码程序生成可执行程序，随后可运行该程序以实现源代码中定义的功能。
源语言始终是相对于机器代码的更高层次语言，采用英语词汇与数学符号混合编写，而汇编语言则是最低层次的可编译语言（汇编器是编译器的特例，负责将汇编语言转换为机器代码）。在编译器/解释器中支持高级语言最为复杂，不仅因其在源代码与机器代码间引入了更高的抽象层级，更因需通过复杂的逻辑形式化这些抽象结构。
目标语言通常为低级语言（如汇编），使用类似机器指令的简写符号编写。这种情况下，编译器还需调用汇编器生成最终机器代码。但部分编译器可直接为真实或虚拟计算机生成机器代码（例如为Java虚拟机生成字节码）。
另一种常见编译策略是面向虚拟机，通过即时编译(JIT)和字节码解释技术，模糊了传统编译器与解释器的界限。
以C/C++为例，它们通常针对特定硬件架构编译。缺点是需为不同处理器类型分别编译。相比之下，Java面向Java虚拟机(JVM)——一个独立于硬件架构的抽象层。其生成的字节码（非真实机器代码）具有跨平台性，但需为每个平台配备JVM（字节码解释器）。这种额外解释层会导致执行速度降低。
解释器是在运行时逐行翻译并执行源代码的计算机程序，它不会生成独立的可执行文件或可供其他程序调用的目标库。
对于计算密集型或数据操作复杂的程序，编译后的版本通常比解释执行更快。但以输入/输出为主、计算较少的程序，两种方式的执行速度差异可能不大。
作为计算机程序，编译器与解释器本身需用某种实现语言编写。20世纪70年代前，大多数编译器使用特定计算机的汇编语言编写。随着用自身源语言编写的C和Pascal编译器的出现，高级语言逐渐成为编译器开发的主流选择。如今，操作系统至少会为用户提供免费的C编译器，部分系统甚至将其作为标准组件分发。"""

from . import interpreter
